--首先创建网吧计费系统的数据库，表结构和数据如2.bmp所示，表的说明如下：
create database ajiji
go
use ajiji
go

--表一为上网卡信息表(tbl_card)
create table tbl_card
(
id	varchar(20) primary key,	--卡号
passWord char(18) not null,			--密码
balance	money ,						--卡上的余额
userName nvarchar(10),				--该上网卡所属的用户名
)

--表2为网吧机器说明表(tbl_computer)
create table tbl_computer
(
id varchar(20) primary key,	 --机器编号，主键
onUse char(1) check (onUse in (1,0)),--该机器是否正在使用，0为未使用，1为正在使用
note text ,							 --该机器的说明
)

--表3为上网记录表(tbl_record)：
create table tbl_record
(
id char(10) primary key,			--记录编号
cardId varchar(20) references tbl_card(id),			--本次上网的卡号，外键
ComputerId varchar(20) references tbl_computer(id),	--本次上网记录所使用的机器号，外键
beginTime datetime ,						--本次上网记录的开始时间
endTime datetime ,							--本次上网记录的结束时间
fee money ,									--本次上网的费用
)

insert into tbl_card values
('0023_ABC','555','98','张军'),
('0025_bbd','abe','300','朱俊'),
('0036_CCD','何柳','100','何柳'),
('0045_YGR','0045_YGR','58','证验'),
('0078_RJV','55885fg','600','校庆'),
('0089_EDE','zhang','134','张峻')

insert into tbl_computer values
('02','0','25555'),('05','1','88888'),
('03','1','55555'),('06','0','688878'),
('04','0','66666'),('B01','0','558558')

insert into tbl_record values
('23','0078_RJV','B01','2007-07-15 19:00:00','2007-07-15 21:00:00','20'),
('34','0025_bbd','03','2006-12-25 18:00:00','2006-12-25 22:00:00','23'),
('45','0023_ABC','03','2006-12-23 15:26:00','2006-12-23 22:55:00','50'),
('46','0023_ABC','03','2006-12-22 15:26:00','2006-12-22 22:55:00','6'),
('47','0023_ABC','03','2006-12-23 15:26:00','2006-12-23 22:55:00','50'),
('48','0023_ABC','03','2007-1-6   15:26:00','2007-1-6   22:55:00','6'),
('55','0023_ABC','03','2006-7-21  15:26:00','2006-7-21  22:55:00','50'),
('64','0045_YGR','04','2006-12-24 18:00:00','2006-12-24 22:00:00','3'),
('65','0025_bbd','02','2006-12-28 18:00:00','2006-12-28 22:00:00','23'),
('98','0025_bbd','02','2006-12-26 18:00:00','2006-12-26 22:00:00','23')

select * from tbl_record
select * from tbl_card
select * from tbl_computer
--请完成以下题目：
--1. 查询出用户名为 '张军' 的上网卡的 上网记录，要求显示 卡号， 用户名 ，机器编号 、开始时间、结束时间，和消费金额，并按消费金额降序排列
select * from tbl_record r
join tbl_card c on r.cardId=c.id
join tbl_computer co on r.ComputerId=co.id 
where userName='张军' order by fee desc 

--2. 查询出 每台机器上的 上网次数 和 消费的总金额
select ComputerId ,count(ComputerId),sum(fee) from tbl_record r
join tbl_card c on r.cardId=c.id
join tbl_computer co on r.ComputerId=co.id 
group by ComputerId

--3. 查询出 所有已经使用过的上网卡的 消费总金额
select cardId,sum(fee) from tbl_record r
join tbl_card c on r.cardId=c.id
where fee is not null
group by cardId 
--4. 查询出 从未消费过的上网卡的 卡号 和 用户名
select c.id,userName from tbl_record r
right join tbl_card c on r.cardId=c.id
where fee is null
group by c.id,userName
--5. 将密码与用户名一样的上网卡信息查询出来
select t1.* from tbl_card t1
join tbl_card t2 on t1.passWord=t2.userName
--6. 查询出使用次数最多的机器号和使用次数
select top 1 ComputerId,count(*) 使用次数 from tbl_record group by ComputerId order by 使用次数 DESC
--7. 查询出卡号是以'ABC'结尾的卡号，用户名，上网的机器号和消费金额
select * from tbl_card c
join tbl_record r on c.id=r.cardId 
where c.id like '%ABC'
--8. 查询出是周六、周天上网的记录，要求显示上网的卡号，用户名，机器号，开始时间、结束时间和消费金额
select cardId 卡号,userName 用户名,ComputerId 机器编号,beginTime 开始时间,endTime 结束时间,fee 消费金额 from tbl_record 
join tbl_card on tbl_record.cardId = tbl_card.id 
where DATENAME(DW,beginTime)='星期六' or DATENAME(DW,beginTime)='星期日'

--9. 查询成一次上网时间超过12小时的的上网记录，要求显示上网的卡号，用户名，机器号，开始时间、结束时间和消费金额
select cardId 卡号,userName 用户名,ComputerId 机器编号,beginTime 开始时间,endTime 结束时间,fee 消费金额 from tbl_record 
join tbl_card on tbl_record.cardId = tbl_card.id 
where datediff(HH,beginTime,endTime)>12

select * from tbl_record where endtime-beginTime>12

--10. 查询出消费金额排列前三名(最高)的上网记录，要求显示上网的卡号，用户名，机器号，开始时间、结束时间和消费金额
select cardId 卡号,userName 用户名,ComputerId 机器编号,beginTime 开始时间,endTime 结束时间,fee 消费金额
from tbl_record join tbl_card on tbl_record.cardId = tbl_card.id 
where fee in (select top 3 fee from tbl_record order by fee DESC)
order by fee DESC

--11. 查询除消费金额排列前三名(最高)的上网记录，要求显示上网的卡号，用户名，机器号，开始时间、结束时间和消费金额
select cardId 卡号,userName 用户名,ComputerId 机器编号,beginTime 开始时间,endTime 结束时间,fee 消费金额 from tbl_record
join tbl_card on tbl_record.cardId = tbl_card.id 
where fee not in (select top 3 fee from tbl_record order by fee DESC)
order by fee DESC

select * from tbl_record order by fee DESC

